<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
        <title>删除排序数组中的重复项 II</title>
    </head>
    <body>
        <section>
            给定一个增序排列数组 nums ，你需要在 原地 删除重复出现的元素，使得每个元素最多出现两次，返回移除后数组的新长度。

            不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

            来源：力扣（LeetCode）
            链接：https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii
            著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
        </section>
        <h1>方法一</h1>
        <pre class="language-JavaScript">
            <code>
                var removeDuplicates = function(nums) {
                    let len = nums.length;
                    if(len <= 2) return len;
    
                    //let k = 2;//[0, ..., k)为可以保留的元素
                    for(let i = len - 1; i >= 2; i --) {
                        if(nums[i] === nums[i - 1] && nums[i - 1] === nums[i - 2]) {
                            nums.splice(i, 1);
                        }
                    }
                    return nums.length;
                };
            </code>
        </pre>
        <h1>方法二</h1>
        <pre class="language-JavaScript">
            <code>
                var removeDuplicates = function(nums) {
                    let len = nums.length;
                    if(len <= 2) return len;
                
                    let k = 0;//[0, ..., k)为可以保留的元素
                    let count = 0;
                    for(let i = k; i < len; i ++) {
                        if(i - 1 < 0 || nums[i] !== nums[i - 1]) {
                            count = 1;
                            nums[k ++] = nums[i];
                        } else {
                            count ++;
                            if(count <= 2) {
                                nums[k ++] = nums[i];
                            }
                        }
                    }
                    return k;
                };
            </code>
        </pre>
        <script>
            var removeDuplicates = function(nums) {
                let len = nums.length;
                if(len <= 2) return len;

                //let k = 2;//[0, ..., k)为可以保留的元素
                for(let i = len - 1; i >= 2; i --) {
                    if(nums[i] === nums[i - 1] && nums[i - 1] === nums[i - 2]) {
                        nums.splice(i, 1);
                    }
                }
                return nums.length;
            };

            var removeDuplicates = function(nums) {
                let len = nums.length;
                if(len <= 2) return len;

                let k = 0;//[0, ..., k)为可以保留的元素
                let count = 0;
                for(let i = k; i < len; i ++) {
                    if(i - 1 < 0 || nums[i] !== nums[i - 1]) {
                        count = 1;
                        nums[k ++] = nums[i];
                    } else {
                        count ++;
                        if(count <= 2) {
                            nums[k ++] = nums[i];
                        }
                    }
                }
                return k;
            };
            console.log(removeDuplicates([0,0,0,1,1,2,3,4,4]))
        </script>
    </body>
</html>